package com.example.chamberlainserver.Service;

import com.example.chamberlainserver.Entry.StorageLocation;

import java.util.List;

/**
 * 存放位置服务接口
 */
public interface StorageLocationService {
    
    /**
     * 添加存放位置
     * @param location 存放位置信息
     * @return 添加后的存放位置信息
     */
    StorageLocation addLocation(StorageLocation location);
    
    /**
     * 更新存放位置信息
     * @param location 存放位置信息
     * @return 更新后的存放位置信息
     */
    StorageLocation updateLocation(StorageLocation location);
    
    /**
     * 删除存放位置
     * @param id 存放位置ID
     * @return 是否删除成功
     */
    boolean deleteLocation(Integer id);
    
    /**
     * 根据ID查询存放位置
     * @param id 存放位置ID
     * @return 存放位置信息
     */
    StorageLocation getLocationById(Integer id);
    
    /**
     * 获取所有存放位置
     * @return 存放位置列表
     */
    List<StorageLocation> getAllLocations();
    
    /**
     * 获取存放位置树结构
     * @return 存放位置树结构
     */
    List<StorageLocation> getLocationTree();
    
    /**
     * 根据父ID获取子存放位置
     * @param parentId 父存放位置ID
     * @return 子存放位置列表
     */
    List<StorageLocation> getSubLocations(Integer parentId);
    
    /**
     * 获取顶级存放位置
     * @return 顶级存放位置列表
     */
    List<StorageLocation> getTopLocations();
    
    /**
     * 根据位置名称搜索存放位置
     * @param name 位置名称关键字
     * @return 存放位置列表
     */
    List<StorageLocation> searchLocationsByName(String name);
    
    /**
     * 根据管理员搜索存放位置
     * @param manager 管理员名称
     * @return 存放位置列表
     */
    List<StorageLocation> getLocationsByManager(String manager);
    
    /**
     * 更新存放位置路径
     * @param id 存放位置ID
     * @param locationPath 新的位置路径
     * @return 更新后的存放位置信息
     */
    StorageLocation updateLocationPath(Integer id, String locationPath);
}